#============================================
# pycharm链接数据库(MySQL)
# 三个位置查找数据库相关
# 右侧上方database
# 左下方database
# 配置里面的plugins插件搜索安装
# 再没有卸载pycharm重新装
# pycharm可以充当很多款数据库软件的客户端


# # django链接MySQL
# 1.第一步配置文件中配置
# DATABASES = {
# 'default': {
# ' ENGINE': ' django . db . backends . mysql',
# 'NAME':‘ day60 '，
# 'USER' : ' root' ,
# PASSWORD' : ' admin123'，
# 'HOST' : '127.0.0.1',
# ' PORT' :3306,
# ' CHARSET': 'utf8 '
# }
# }
# 2.代码声明
# django默认用的是mysq1db模块链接MySQL
# 但是该模块的兼容性不好需要手动改为用pymysq1链接
# 你需要告诉django不要用默认的mysqldb还是用pymysql
# #在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以
# import pymysql
# pymysql.install_ as_ MySQLdb()
#============================================
# Django ORM
# ORM.对象关系映射
# 作用:能够让一个不用sql语句的小白也能够通过python面向对象的代码简单快捷的操作数据库
# 不足之处:封装程度太高有时候sq1语句的效率偏低需要你自己写sQL语句
# 类       表        对象属性
# 对象     记录      记录某个字段对应的值

# 应用下面的models. py文件
# # 1先去models.py中书写一个类
# class User (models . Model ) :
# # id int primary_ key auto_ increment
# id = models . AutoField(primary_ key=True )

# # username varchar (32 )
# username = models. CharField( max_ 1ength=32)

# # password int
# password = models. IntegerField( )
# ********************# 2数据库迁移命令*******************
# python manage.py makemigrations将操作记录记录到小本本上(migrations文件夹)
# python manage.py migrate将操作真正的同步 到数据库中
# #只要你修改了models. py中跟数据库相关的代码就必须重新执行上述的两条命令

# class User (models .Model) :

# # id int primary_ key auto_ increment
# id = models . AutoField(pr imary_ key=True,verbose_ name='主键' )

# # username varchar (32 )
# username = models . CharField(max_ length=32,verbose_ name= '用户名' )
# CharField必须要指定max_ length参数不指定会直接报错
# verbose_ name该参数是所有字段都有的就是用来对字段的解释

# # password int
# password = models. IntegerF ield(verbose_ name= '密码')

# class Author (models . Model) :
# #由于一张表中必须要有一个主键字段并且一般情况下都叫id字段
# #所以orm当你不定义主键字段的时候orm会自动帮你创建. -个名为id主键字段
# #也就意味着后续我们在创建模型表的时候如果主键字段名没有额外的叫法那么主键字段
# 可以省略不写
# # username varchar (32 )
# username = models . CharField( max_ length=32 )
# # password int
# password = models . IntegerField( )
#============================================
# 字段的增删改查
# #字段的增加
# 1.可以在终端内直接给出默认值
# 2.该字段可以为空
# info = models . CharField (max_ length=32 , verbose_ name='个人简
# 介'，null=True)
# 3.直接给字段设置默认值
# hobby = models . CharField (max_ length=32 ，verbose_ name= '兴趣爱
# 好'，default=' study')
# #字段的修改
# 直接修改代码然后执行数据库迁移的两条命令即可!
#字段的删
# 直接注释对应的字段然后执行数据库迁移的两条命令即可!
# 执行完毕之后字段对应的数据也都没有了
# ””
# 在操作models . py的时候一-定 要细心
# 千万不要注释- -些字段
# 执行迁移命令之前最好先检查一下 自己写的代码
#============================================
# 数据的增删改查
# #今天只会介绍一点点后面会详细的介绍

# #查
# res = models.User.objects.filter (username=username)
# 返回值你先看成是列表套数据对象的格式
# 它也支持索引取值切片操作但是不支持负数索引
# 它也不推荐你使用索引的方式取值
# user_ obj = models.User.objects.filter (username=username).first()
# filter括号内可以携带多个参数参数与参数之间默认是and关系
# 你可以把filter联想成where记忆

# #增
# from app01 import models
# res = models . User . objects . create ( username=username , password=password )
# #返回值就是当前被创建的对象本身
# #第二种增加
# user_ obj = models .User (username=username , password=password)
# user_ obj.save() # 保存数据

# 改
# #先讲数据库中的数据全部展示到前端然后给每一个数据两个按钮 -个编辑一个删除
# #查看
# def userlist (request):
# #查询出用户表里面所有的数据
# #方式1
# # data = models .User . objects. filter( )
# # print(data)
# #方式2
# user_ queryset = models. User .objects.all( )
# # return render ( request, 'userlist.html',{' user_ queryset ' :user_ queryset})
# return render (request, ' userlist .html ' ,1ocals())

# #编辑功能
# #点击编辑按钮朝后端发送编辑数据的请求
# 如何告诉后端用户想要编辑哪条数据?
# 将编辑按钮所在的那一行数据的主键值发送给后端
# 利用url问号后面携带参数的方式

# {% for user_ obj in user_ queryset %}
# ≤tr>
#     <td>{{ user_ obj.id }}</td>
#     <td>{{ user_ obj . username }}</td>
#     <td>{{ user_ obj . password }}</td>
#     <td>
#     <a href=" /edit_ user/?user_ id={{user_ obj.id }}” class="btn btn-primary btn-xs">编辑</a>
#     <a href="" class="btn btn-danger btn-xs">删除</a>
#     </td>
# </tr>
# {% endfor %}|

# #后端查询出用户想要编辑的数据对象展示到前端页面供用户查看和编辑

# def edit_user (request):
#     #获取ur1问号后面的参数
#     edit_id = request. GET.get( 'user_id' )
#     #查询当前用户想要编辑的数据对象
#     edit_obj = models.User.objects.filter(id=edit_id).first()
#     if request . method == "POST":
#         username = request . POST.get( ' username' )
#         password = request. POST. get( ' password' )
#         #去数据库中修改对应的数据内容
#         #修改数据方式1
#         models.User.objects.filter(id=edit_id) .update (username =username , password=password )
#         将filter查询出来的列表中所有的对象全部更新
#         批量更新操作
#         只修改被修改的字段
#         #跳转到数据的展示页面
#         return redirect( ' /userlist/')
#     #将数据对象展示到页面上     
#     return render (request, 'edit_ user.html' ,locals( ))

# #删除功能
# 跟编辑功能逻辑类似
# def delete_ _user ( request) :
    # #获取用户想要删除的数据id值
    # delete_ id = request. GET .get('user_ _id')
    # #直接去数据库中找到对应的数据删除即可
    # models . User .objects. filter(id=delete_ id) . delete( )
    # 批量删除
    # #跳转到展示页面
    # return redirect( ' /userlist/')
# #真正的删除功能应该需要 二次确认我们这里先不做后面会讲
# #删除数据内部其实并不是真正的删除我们会给数据添加一个标识字段用来表示当前数据是否被
# 删除了，如果数据被删了仅仅只是讲字段修改一个状态
# username password      is_ delete
# jason        123             0
# egon         123             1

